package com.peoit.honeycomb.application;

import java.text.ParseException;
import java.util.List;

import com.peoit.honeycomb.domain.HoneycombProject;
import com.peoit.honeycomb.domain.repository.EntityRepository;
import com.peoit.honeycomb.dto.InvestmentDto;
import com.peoit.honeycomb.dto.ProjectQueryDto;

/**
 * Created by Bing.Zeng on 2015/9/26.
 */
public interface ProjectApplication extends EntityRepository {
	/**
	 * 发布项目
	 *
	 * @param honeycombProject
	 */
	public HoneycombProject create(String publisUserId, HoneycombProject honeycombProject);

	/**
	 * 修改项目
	 * 
	 * @param UserId
	 * @param honeycombProject
	 * @return
	 */
	public HoneycombProject updateProject(String UserId, HoneycombProject honeycombProject);

	/**
	 * 根据条件分页查询 project
	 *
	 * @param dto
	 * @return
	 */
	public List<HoneycombProject> findByWherePage(ProjectQueryDto dto) throws ParseException;

	/**
	 * 根据条件返回 总条数
	 *
	 * @param dto
	 * @return
	 */
	public long findByWhereCount(ProjectQueryDto dto);

	/**
	 * 验证审核项目
	 *
	 * @param projectId
	 * @param passOrNot
	 * @return
	 */
	public boolean verify(String projectId, boolean passOrNot);

	/**
	 * 是否同意延期
	 * 
	 * @param projectId
	 * @param passOrNot
	 * @return
	 */
	public boolean postpone(String projectId, boolean passOrNot);

	/**
	 * 取消关注或者关注项目
	 *
	 * @param userId
	 * @param projectId
	 * @param concern
	 *            y/n
	 * @return
	 */
	public boolean concern(String userId, String projectId, String concern);

	/**
	 * 投资项目
	 *
	 * @param dto
	 * @return
	 */
	public boolean invest(InvestmentDto dto);

	/**
	 * 用户是否关注了指定项目
	 *
	 * @param userId
	 * @param projectId
	 * @return
	 */
	public boolean isConcern(String userId, String projectId);

	/**
	 * 分页查询关注项目
	 *
	 * @param userId
	 * @return
	 */

	public List<HoneycombProject> findConcernedProjectPage(String userId, int offset, int pageSize);

	/**
	 * 分页查询已投资的项目
	 *
	 * @param userId
	 * @param offset
	 * @param pageSize
	 * @return
	 */
	public List<HoneycombProject> findInvesteddProject(String userId, int offset, int pageSize);

	/**
	 * 分页查询已投资的项目，且该项目已成功
	 *
	 * @param userId
	 * @param offset
	 * @param pageSize
	 * @return
	 */
	public List<HoneycombProject> findInvesteddSuccessProject(String userId, int offset, int pageSize);

	/**
	 * 支付项目保证金
	 *
	 * @param projectId
	 * @return
	 */
	public Boolean payMargin(String projectId);

	/**
	 * 启动项目
	 * 
	 * @param dto
	 */
	public void startProject(ProjectQueryDto dto);

	/**
	 * 终止项目
	 * 
	 * @param dto
	 */
	public void stopProject(ProjectQueryDto dto);

	/**
	 * 取消项目
	 * 
	 * @param dto
	 */
	public void cancelProject(ProjectQueryDto dto);

	/**
	 * 设置保证金
	 * 
	 * @param projectId
	 * @param projectEarnestPercent
	 * @param investorEarnestPercent
	 */
	public void updateEarnestPercent(String projectId, double projectEarnestPercent, double investorEarnestPercent);

	/**
	 * 取消投资
	 * 
	 * @param projectId
	 * @param investId
	 */
	public void cancelInvest(String projectId, String investId);

	/**
	 * 申请延期
	 * 
	 * @param dto
	 */
	public void applyDelay(ProjectQueryDto dto);

	/**
	 * 修改投资状态
	 * 
	 * @param id
	 * @param status
	 */
	public void changeInvestStatus(String id, int status);

}
